home *** CD-ROM | disk | FTP | other *** search
- /*********************************************************************
- **
- ** Gui4Cli Include file
- ** $VER: 3.6 (20/8/98)
- ** Author : D. Keletsekis - dck@hol.gr
- **
- ** This file holds some of the Gui4Cli internal structures.
- ** You can access them by getting a pointer to the GCmain
- ** structure (see end of this file) and following the pointers
- ** from there.
- **
- ** The *GCmain pointer is stored in the "gcmain" field of the
- ** Gui4Cli message structure, and you can get it by sending
- ** a GM_LOCK message to Gui4Cli, or when Gui4Cli sends you a
- ** message (using the CALL command).
- **
- ** From *GCmain you can see all the gui files, the events,
- ** the listviews, the variables, and most of everything that
- ** Gui4Cli holds dear. Why you would ever want to, is an
- ** other matter.. Look at the C examples in this directory
- ** for information on how to access & manipulate them.
- **
- *********************************************************************/
-
- // union used in events & commands, to hold the arguments, which
- // can be numbers or strings - LTWH=numbers, Title=string etc..
-
- union commandunion
- { LONG num; // if it's a number
- char *str; // if it's a string
- APTR dummy; // forget it..
- };
-
- #define OPT_COUNT 12 // max number of arguments
-
- /*********************************************************************
- The Gui4Cli message structure - use it to communicate with G4C
- *********************************************************************/
-
- struct g4cmsg
- {
- struct Message node; // EXEC message structure
-
- // When Gui4Cli sends the message :
- // - This will be a pointer to the command name which will
- // have been converted to upper case. If there are any more
- // arguments passed, then these will be stored in "args[0-5]"
- // When you send a GM_COMMAND or GM_RUN message to Gui4Cli :
- // - This must point to a string buffer which will contain
- // the command which you want Gui4Cli to execute.
- // otherwise null..
- UBYTE *com;
-
- // This will either contain a pointer to struct *GCmain, or
- // NULL. You get the pointer when Gui4Cli sends you a
- // message (with the CALL command), or when Gui4Cli replies
- // to a GM_LOCK message that you sent. Otherwise NULL.
- struct GCmain *gcmain;
-
- // Set this to 392001 which is a "magic" number that Gui4Cli
- // will recognise as being a GC type message.
- LONG magic;
-
- // 6 argument strings. When Gui4Cli sends you a message, it
- // will consist of a command (which will be in *com above)
- // and up to 6 arguments. This is where the arguments will
- // be stored (if any) - so, if arg[x] is not NULL, it will
- // contain a pointer to a null terminated string.
- UBYTE *args[6];
-
- // if you want to return something, then you must store it
- // in a buffer which you MUST get using AllocVec() and point
- // it here. The buffer will be available from within Gui4Cli
- // as internal variable $$CALL.RET
- // IMPORTANT NOTE:
- // If you attach such a buffer, it will be freed by Gui4Cli,
- // using FreeVec(), before Gui4Cli sends it's next message.
- UBYTE *msgret;
-
- UBYTE type; // type of message - see defines below
- LONG res; // error status (0 means OK)
- APTR data; // null - for future expansion
- APTR exp; // null - for future expansion
- };
-
- /*********************************************************************
- Message types
- These are the currently available types for the "type" field
- of the above structure.
- *********************************************************************/
-
- // ------------------------------------------------------------------
- // A) If the command is sent by a program to Gui4Cli:
- // The "com" field must point to a valid command line to be
- // executed by Gui4Cli - only commands which are defined as
- // "arexx capable" can be executed. The line will be translated,
- // then parsed and executed. Upon returning, the "res"
- // field will hold the return code, if any was set..
- // ---------------------- ...
- // B) If sent by Gui4Cli to an outside program, using CALL :
- // "com" will point to the command name, "gcmain" will contain
- // a pointer to the GCmain structure, and if there are any arguments
- // they will be stored in "args[0]"-"args[5]". Upon return, $$RetCode
- // will be set to the "res" value you have set (if any). 0 means OK
- // ------------------------------------------------------------------
- #define GM_COMMAND 1
-
- // ------------------------------------------------------------------
- // This is the same as GM_COMMAND, Part (A). The difference is that
- // while GM_COMMAND will do the commands synchronously - i.e. the
- // program which sends the command will have to wait until after
- // Gui4Cli executes the command to receive the repply, GM_RUN will
- // pass the command to Gui4Cli and return and let Gui4Cli get on
- // with it asynchronously. The draw back is that you will not know
- // when the command finished executing and if it was successful.
- // ------------------------------------------------------------------
- #define GM_RUN 2
-
- // ------------------------------------------------------------------
- // GM_LOCK will freeze Gui4Cli, until a GM_UNLOCK message is
- // received. When you send a GM_LOCK message, Gui4Cli will immediately
- // reply, storing a pointer to the "GCmain" structure in the message's
- // "gcmain" field. It will then wait, doing nothing until a GM_UNLOCK
- // message is received. Do what you want and then send GM_UNLOCK.
- // ------------------------------------------------------------------
- #define GM_LOCK 5
-
- // ------------------------------------------------------------------
- // MUST UNLOCK Gui4Cli after a GM_LOCK message.
- // ------------------------------------------------------------------
- #define GM_UNLOCK 6
-
- /*********************************************************************
- LV helper structures
- these hold various things for listviews..
- *********************************************************************/
-
- // holds listview colors etc
-
- struct styledef
- {
- BOOL usestyle; // =1 if styles have been specifically set
- WORD fg; // foreground pen
- WORD nbg; // normal background pen
- WORD sbg; // selected background pen
- WORD shad; // shadow - signifies to make letters 3D
- };
-
- // If a LV loads a DataBase file, it allocates a dbdef struct
- // and links it to the "db" member of the fulist struct. All
- // field definitions are link-listed to this struct.
-
- struct lvfield // field definition struct (AllocVec)
- {
- char name[31]; // field name
- LONG start; // byte in record where field starts
- LONG length; // field length
- UBYTE type; // field type (N)umber,(C)har or (D)ate
- struct styledef sd; // full styledef struct
- struct lvfield *next; // pointer to next field or null
- // ----------- private fields below
- };
-
- struct dbdef
- {
- LONG fieldnum; // number of fields
- LONG reclength; // record length
- struct lvfield *topfield; // linked list of fields (AllocVec)
- // ------------- private fields below
- };
-
- /*********************************************************************
- LISTVIEW LINE
- Every line of a listview has a structure like this.
- They are kept in a struct List and given to the LV.
- There is a pointer to this list in struct "fulist".
- The LV shows the text pointed to by node->ln_Name.
- This is set to point to some part of the *start buffer,
- according to how much the list is shifted (left/right)
- **********************************************************************/
-
- struct lister
- {
- struct Node node; // a normal exec node for struct List. The ln_Name
- // field points to the start of the visible text.
- UBYTE *start; // pointer to the start of the line's text - i.e. the full buffer
- LONG length; // line length - buffer is AllocMem (length+1) !!!!
- BOOL Selected; // 1 = line is selected, 0 = it's not
- struct fulist *fls; // ptr back to parent fulist structure (for hook)
- UBYTE filend; // pointer to end of filename - for dir listviews
- UBYTE type; // type of entry - F=file, D=dir etc
- };
-
-
- /*********************************************************************
- LISTVIEW
- This is the main listview structure holding all the information
- needed for all the various types of listviews. A pointer to
- this struct is kept in the EVENT structure of the xLISTVIEW event
- **********************************************************************/
-
- struct fulist
- {
- struct List *ls; // the list structure with all the lines
- int maxlength; // length of longest line (strlen)
- int maxnow; // - not used any more
- LONG totnum; // total number of lines
- struct lister *curpt; // pointer to current record (or null)
- LONG line; // line number of current record (-1 if none)
- UBYTE maxdirlength; // length of longest dir name (for size alignment)
- char curdir[140]; // buffer for current dir name (when in DIR mode)
- int dirhook; // gadid of xlvdirhook event or 0
- struct Event *bt; // point to the xLISTVIEW event
- struct guifile *gf; // points back to parent gui file
- LONG magic; // sanity check - set to 22108
- struct dbdef *db; // link field info structure for database LVs
- struct styledef nsd; // full styledef struct for normal records
- struct styledef dsd; // full styledef struct for dir,vol etc
- SHORT linedist; // distance between lines
-
- // ----------- private fields below..
- };
-
- /********************************************************************
- IMAGES
- structure used to hold image information
- *********************************************************************/
- struct imginfo
- {
- Object *po; // the datatype object
- struct BitMapHeader *bmh; // the header..
- struct BitMap *bm; // the data..
- char name[35]; // the name (alias) of this image
- LONG count; // times in use
- struct imginfo *next; // next image
- };
-
- /*********************************************************************
- VARIABLE
- This is the variables structure. Variables are kept in linked
- list - Each gui file has a pointer to such a list for its own
- private vars. the Global vars pointer is kept in the GCmain struct.
- **********************************************************************/
-
- struct var
- {
- char *name; // the variable's name (AllocVec)
- char *str; // the variable's contents (AllocVec)
- struct var *next; // ptr to next variable in list
- APTR ex; // for future expansion (NULL now)
- };
-
- /*********************************************************************
- CYCLER & RADIO GADGETS
- This structure holds the fields of a cycler or a radio button
- gadget. A pointer to it is kept from the event structure.
- **********************************************************************/
-
- struct cycler
- {
- char *cyp[13]; // Pointers to cycler/radio strings
- char *var[13]; // Pointers to value to put in $variable
- int cno; // Number of strings actually declared (12 max)
- int height; // distance between radio buttons (N/A for cyclers)
- };
-
- /*********************************************************************
- EVENT COMMAND
- This structure holds an event command. They are linked in
- a list with a pointer to the top event command kept in the
- event structure.
- **********************************************************************/
-
- struct line
- {
- SHORT type; // type of command (see Gui4Cli.def)
- int progline; // line No of the command in the file
- union commandunion arg[OPT_COUNT]; // the command's arguments
- struct line *next; // pointer to next command or NULL
- // -------- private fields below
- };
-
- /*********************************************************************
- EVENT
- This is the main event structure. Events are linked in a list
- with a pointer to the top event kept in the guifile structure.
- **********************************************************************/
-
- struct Event
- {
- union commandunion arg[OPT_COUNT]; // the event's arguments (LTWH etc)
- int ID; // gadget's internal id - only for Gui4Cli
- int UID; // GADID of gadget (or 0 if not defined)
- int key; // Decimal value of Keyboard shortcut
- LONG val; // current value of gadget (varies..)
- SHORT type; // type of gadget (see file Gui4Cli.def)
- char *file; // pointer to the event's variable name
- BOOL onoff; // 0=gadget is ON, 1=OFF
- LONG progline; // Line in the file where event is declared
- LONG lastline; // Line No of last of this events commands
- BOOL appear; // whether it appears or not (SHOW|HIDE)
- int l, t, w, h; // current ACTUAL (full window) left top width height
- struct guifile *gf; // pointer to the guifile of this event
- struct Gadget *gad; // Pointer to the gadget struct - If it's a gadget
- struct DiskObject *dobj; // Pointer to icon for AppIcons & icons
- struct cycler *cy; // pointer to cycler struct - also cast into general purpose pointers
- struct fulist *lt; // pointer to struct if it's a ListView (or NULL)
- struct TextAttr *fta; // text attribute struct
- struct TextFont *ftf; // text font struct
- UBYTE *help; // pointer to help text or NULL
- struct line *topx; // first of a linked list of event commands
- struct var *topvar; // first of list of this event's variables (if defined)
- struct Event *next; // next in the list of events
- // --------- private fields below here
- };
-
-
- /*********************************************************************
- GUI FILE
- This is the main guifile structure. Guis are linked in a list
- with a pointer to the first gui kept in the G4C structure.
- **********************************************************************/
-
- struct guifile
- {
- LONG magic; // for sanity checks - must be 7225825
- struct Window *wn; // pointer to this gui's window (if open)
- struct Screen *sc; // ptr to screen (if window's open)
- struct AppMenuItem *appitem; // ptr to appitem (if any)
- struct Menu *menu; // menus (if any)
- struct TextAttr *fta; // text attributes
- struct TextFont *ftf; // text font
- BPTR cp; // console pointer for this gui (if any)
- char scr[31]; // buffer for screen name
- char imgname[35]; // name of background image (if any)
- char *wntitle; // ptr to window's title
- char *wow; // pointer to win-on-win gui name
- int wowl, wowt; // offsets for winonwin
- char fullpath[140]; // full path & filename of gui file
- char name[35]; // just the filename (separate for guirename)
- UWORD wnsmall[4]; // small window sizes LTWH
- char *path; // variable search path
- BOOL usepath; // 1=use path, 0=use global (forget it..)
- struct Event *topbt; // first of list of EVENTs
- struct var *topvar; // first of list of this gui's variables
- struct guifile *next; // next gui file
- // ------------- private fields below
- };
-
- /*********************************************************************
- MAIN Gui4CLi STRUCTURE
- !!! This is the structure you receive in the msg->gcmain field !!!
- It's main use is to get a pointers to the top gui file (from where
- you can see all events and all commands), or to the current lv
- or to the Global variable list etc...
- **********************************************************************/
-
- struct GCmain
- {
- LONG magic; // sanity check (MM_G4C = 4848484)
-
- struct guifile *topguifile; // first of a linked list of gui files
- struct Event *curbt; // current event pointer (for local vars etc)
- struct Event *curgad; // GAD - current gadget pointer (for info)
- struct guifile *curgf; // GUI - current gui pointer
- struct fulist *curlv; // LV - current listview pointer
- struct var *gtopvar; // linked list of Global variables
- struct imginfo *topimage; // top of linked list of images
-
- LONG tab; // tabsize
- char *pipebuff; // pointer to pipe buffer
- LONG grid; // grid size for visual edit def=1
- LONG maxtransloop; // set to 100 - how many times translate can retranslate the buffer before error
- UBYTE defscreenname[40]; // default screen name (* = front screen)
-
- // general purpose memory buffers (you can use them for temporary storage)
- char *membuff[5]; // 5 main memory buffers of buffsize length
- LONG buffsize; // size of buffers
-
- // These are available for use.. (used internally as flags etc)
- LONG num; // SPARE LONG
- char buff[256]; // SPARE BUFFER
- char *pt, *pt2; // SPARE CHARACTER POINTERs
- __aligned struct FileInfoBlock fib; // SPARE fib
- __aligned BPTR lk; // SPARE BPTR
-
- // for internal variables
- LONG src_pos; // position for searchvar
- LONG src_length; // var length for searchvar
- USHORT red, green, blue; // Last Palette's RGB values
- LONG color, totcolors; // + color number + No of colors
- struct imginfo *curimg; // current image
- LONG mx, my; // mouse position
-
- // holding place for the default font (MONOspace)
- struct TextAttr __aligned ta; // our txtattr for the MONO font
- UBYTE fontbuff[40]; // buffer for font name
-
- // ------------------ private fields below..
-
- };
-
- /*********************************************************************
- Magic numbers
- Some of these are used to check the "sanity" of Gui4Cli,
- and others to identify where messages are comming from.
- **********************************************************************/
-
- #define MM_PIPE_LAUNCH 6511841 // pipe launch identifier
- #define MM_PIPE_DATA 4523666 // pipe data identifier
- #define MM_PIPE_RDV 4526789 // magic for pipe rendez-vous struct
- #define MM_LAUNCH 7250838 // launch message identifier
- #define MM_GFILE 7225825 // gui file sanity check
- #define MM_C_GUI 7226625 // c:gui identifier
- #define MM_LISTVIEW 22108 // lv sanity check
- #define MM_G4C 4848484 // gcmain struct's sanity check
- #define MM_OUTSIDER 392001 // the g4cmsg message identifier
-
-
-
-
-